package com.vlong.town.service.tourist;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.vlong.town.entity.tourist.TouristInfo;
import com.vlong.town.mapper.tourist.TouristInfoMapper;

/**
 * 旅游景点信息业务实现类
 * @author Assassin
 */
@Service
public class TouristInfoService {

    // Fields

    /**
     * 旅游景点信息Mapper接口
     */
    @Autowired
    private TouristInfoMapper touristInfoMapper;// 旅游景点信息Mapper接口

    // Methods

    /**
     * 添加旅游景点
     * @param touristId 标识信息-景点Id[主键值]
     * @param townId 标识信息-村镇Id
     * @param state 状态信息-数据状态[1-正常 | 2-删除]
     * @param status 状态信息-公告状态[1-已发布]
     * @param title 基础信息-信息标题景点名称
     * @param content 基础信息-信息内容
     * @param desc 基础信息-景点简介
     * @param thumbnail 基础信息-缩略图
     * @param feature 基础信息-景点特征
     * @param address 位置信息-景点位置
     * @param lng 位置信息-景点经度
     * @param lat 位置信息-景点纬度
     * @param createTime 时间信息-添加时间
     * @param updateTime 时间信息-更新时间
     * @param price 基础信息-景点价格
     * @param salePrice 基础信息-优惠价格
     * @param ticketNumber 基础信息-门票数量
     * @param collectionNumber 基础信息-收藏数量
     * @param level 基础信息-景点星级
     * @param sort 排序
     * @param isDel 状态信息-是否删除[1-删除,0未删除]
     * @param disableDesc 禁用说明
     * @param delDesc 删除说明
     * @return Long touristId 添加后的数据库主键值
     */
    @Transactional
    public Long add(Long touristId, Long townId, Integer state, Integer status, String title, String content, String desc, String thumbnail, String feature, String address, Float lng, Float lat, Long createTime, Long updateTime, Long price, Long salePrice, Integer ticketNumber, Integer collectionNumber, Integer level, Integer sort, Integer isDel, String disableDesc, String delDesc) {
        // 构造旅游景点参数实体
        TouristInfo tourist = new TouristInfo();
        tourist.setTouristId(touristId);// Set 标识信息-景点Id[主键值]
        tourist.setTownId(townId);// Set 标识信息-村镇Id
        tourist.setState(state);// Set 状态信息-数据状态[1-正常 | 2-删除]
        tourist.setStatus(status);// Set 状态信息-公告状态[1-已发布]
        tourist.setTitle(title);// Set 基础信息-信息标题景点名称
        tourist.setContent(content);// Set 基础信息-信息内容
        tourist.setDesc(desc);// Set 基础信息-景点简介
        tourist.setThumbnail(thumbnail);// Set 基础信息-缩略图
        tourist.setFeature(feature);// Set 基础信息-景点特征
        tourist.setAddress(address);// Set 位置信息-景点位置
        tourist.setLng(lng);// Set 位置信息-景点经度
        tourist.setLat(lat);// Set 位置信息-景点纬度
        tourist.setCreateTime(createTime);// Set 时间信息-添加时间
        tourist.setUpdateTime(updateTime);// Set 时间信息-更新时间
        tourist.setPrice(price);// Set 基础信息-景点价格
        tourist.setSalePrice(salePrice);// Set 基础信息-优惠价格
        tourist.setTicketNumber(ticketNumber);// Set 基础信息-门票数量
        tourist.setCollectionNumber(collectionNumber);// Set 基础信息-收藏数量
        tourist.setLevel(level);// Set 基础信息-景点星级
        tourist.setSort(sort);// Set 排序
        tourist.setIsDel(isDel);// Set 状态信息-是否删除[1-删除,0未删除]
        tourist.setDisableDesc(disableDesc);// Set 禁用说明
        tourist.setDelDesc(delDesc);// Set 删除说明
        // 调用旅游景点DAO接口
        this.touristInfoMapper.insert(tourist);
        return tourist.getTouristId();
    }

    /**
     * 通过对象  添加旅游景点
     * @param touristInfo 旅游实体
     */
    @Transactional
    public Long addTourist(TouristInfo touristInfo) {
        // 调用旅游景点DAO接口
        touristInfo.setCreateTime(System.currentTimeMillis());
        touristInfo.setIsDel(0);//是否删除
        touristInfo.setState(0);//是否禁用
        touristInfo.setStatus(1);//公告状态[1-已发布]
        touristInfo.setSort(1);//排序
       // touristInfo.setLat(Float.parseFloat(touristInfo.getLat()));
        this.touristInfoMapper.insert(touristInfo);
        return touristInfo.getTouristId();
    }
    /**
     * 逻辑删除旅游景点信息
     * @param touristId 主键值
     */
    @Transactional
    public void delete(Long touristId) {
        this.touristInfoMapper.delete(touristId);
    }


    /**
     * 更新旅游景点
     * @param touristId 标识信息-景点Id[主键值]
     * @param townId 标识信息-村镇Id
     * @param state 状态信息-数据状态[1-正常 | 2-删除]
     * @param status 状态信息-公告状态[1-已发布]
     * @param title 基础信息-信息标题景点名称
     * @param content 基础信息-信息内容
     * @param desc 基础信息-景点简介
     * @param thumbnail 基础信息-缩略图
     * @param feature 基础信息-景点特征
     * @param address 位置信息-景点位置
     * @param lng 位置信息-景点经度
     * @param lat 位置信息-景点纬度
     * @param createTime 时间信息-添加时间
     * @param updateTime 时间信息-更新时间
     * @param price 基础信息-景点价格
     * @param salePrice 基础信息-优惠价格
     * @param ticketNumber 基础信息-门票数量
     * @param collectionNumber 基础信息-收藏数量
     * @param level 基础信息-景点星级
     * @param sort 排序
     * @param isDel 状态信息-是否删除[1-删除,0未删除]
     * @param disableDesc 禁用说明
     * @param delDesc 删除说明
     */
    @Transactional
    public void edit(Long touristId, Long townId, Integer state, Integer status, String title, String content, String desc, String thumbnail, String feature, String address, Float lng, Float lat, Long createTime, Long updateTime, Long price, Long salePrice, Integer ticketNumber, Integer collectionNumber, Integer level, Integer sort, Integer isDel, String disableDesc, String delDesc) {
        // 构造旅游景点参数实体
        TouristInfo tourist = new TouristInfo();
        tourist.setTouristId(touristId);// Set 标识信息-景点Id[主键值]
        tourist.setTownId(townId);// Set 标识信息-村镇Id
        tourist.setState(state);// Set 状态信息-数据状态[1-正常 | 2-删除]
        tourist.setStatus(status);// Set 状态信息-公告状态[1-已发布]
        tourist.setTitle(title);// Set 基础信息-信息标题景点名称
        tourist.setContent(content);// Set 基础信息-信息内容
        tourist.setDesc(desc);// Set 基础信息-景点简介
        tourist.setThumbnail(thumbnail);// Set 基础信息-缩略图
        tourist.setFeature(feature);// Set 基础信息-景点特征
        tourist.setAddress(address);// Set 位置信息-景点位置
        tourist.setLng(lng);// Set 位置信息-景点经度
        tourist.setLat(lat);// Set 位置信息-景点纬度
        tourist.setCreateTime(createTime);// Set 时间信息-添加时间
        tourist.setUpdateTime(updateTime);// Set 时间信息-更新时间
        tourist.setPrice(price);// Set 基础信息-景点价格
        tourist.setSalePrice(salePrice);// Set 基础信息-优惠价格
        tourist.setTicketNumber(ticketNumber);// Set 基础信息-门票数量
        tourist.setCollectionNumber(collectionNumber);// Set 基础信息-收藏数量
        tourist.setLevel(level);// Set 基础信息-景点星级
        tourist.setSort(sort);// Set 排序
        tourist.setIsDel(isDel);// Set 状态信息-是否删除[1-删除,0未删除]
        tourist.setDisableDesc(disableDesc);// Set 禁用说明
        tourist.setDelDesc(delDesc);// Set 删除说明
        // 调用旅游景点DAO接口
        this.touristInfoMapper.update(tourist);
    }

    /**
     * 修改旅游景点
     * @param touristInfo
     */
    @Transactional
    public void updateTourist(TouristInfo touristInfo) {
        // 调用旅游景点DAO接口
        touristInfo.setUpdateTime(System.currentTimeMillis());
        this.touristInfoMapper.update(touristInfo);
    }
    /**
     * 主键查询旅游景点
     * @param touristId 主键值
     * @return Tourist 实体
     */
    @Transactional
    public TouristInfo queryById(Long touristId) {
        // 调用旅游景点DAO接口
        return this.touristInfoMapper.selectById(touristId);
    }

    /**
     * 根据条件查询旅游景点列表
     * @param touristId 标识信息-景点Id[主键值]
     * @param townId 标识信息-村镇Id
     * @param state 状态信息-数据状态[1-正常 | 2-删除]
     * @param status 状态信息-公告状态[1-已发布]
     * @param title 基础信息-信息标题景点名称
     * @param content 基础信息-信息内容
     * @param desc 基础信息-景点简介
     * @param thumbnail 基础信息-缩略图
     * @param feature 基础信息-景点特征
     * @param address 位置信息-景点位置
     * @param lng 位置信息-景点经度
     * @param lat 位置信息-景点纬度
     * @param createTime 时间信息-添加时间
     * @param updateTime 时间信息-更新时间
     * @param price 基础信息-景点价格
     * @param salePrice 基础信息-优惠价格
     * @param ticketNumber 基础信息-门票数量
     * @param collectionNumber 基础信息-收藏数量
     * @param level 基础信息-景点星级
     * @param sort 排序
     * @param isDel 状态信息-是否删除[1-删除,0未删除]
     * @param disableDesc 禁用说明
     * @param delDesc 删除说明
     * @return List<Tourist> 实体List
     */
    @Transactional
    public List<TouristInfo> queryList(Long touristId, Long townId, Integer state, Integer status, String title, String content, String desc, String thumbnail, String feature, String address, Float lng, Float lat, Long createTime, Long updateTime, Long price, Long salePrice, Integer ticketNumber, Integer collectionNumber, Integer level, Integer sort, Integer isDel, String disableDesc, String delDesc) {
        // 构造旅游景点参数实体
        TouristInfo tourist = new TouristInfo();
        tourist.setTouristId(touristId);// Set 标识信息-景点Id[主键值]
        tourist.setTownId(townId);// Set 标识信息-村镇Id
        tourist.setState(state);// Set 状态信息-数据状态[1-正常 | 2-删除]
        tourist.setStatus(status);// Set 状态信息-公告状态[1-已发布]
        tourist.setTitle(title);// Set 基础信息-信息标题景点名称
        tourist.setContent(content);// Set 基础信息-信息内容
        tourist.setDesc(desc);// Set 基础信息-景点简介
        tourist.setThumbnail(thumbnail);// Set 基础信息-缩略图
        tourist.setFeature(feature);// Set 基础信息-景点特征
        tourist.setAddress(address);// Set 位置信息-景点位置
        tourist.setLng(lng);// Set 位置信息-景点经度
        tourist.setLat(lat);// Set 位置信息-景点纬度
        tourist.setCreateTime(createTime);// Set 时间信息-添加时间
        tourist.setUpdateTime(updateTime);// Set 时间信息-更新时间
        tourist.setPrice(price);// Set 基础信息-景点价格
        tourist.setSalePrice(salePrice);// Set 基础信息-优惠价格
        tourist.setTicketNumber(ticketNumber);// Set 基础信息-门票数量
        tourist.setCollectionNumber(collectionNumber);// Set 基础信息-收藏数量
        tourist.setLevel(level);// Set 基础信息-景点星级
        tourist.setSort(sort);// Set 排序
        tourist.setIsDel(isDel);// Set 状态信息-是否删除[1-删除,0未删除]
        tourist.setDisableDesc(disableDesc);// Set 禁用说明
        tourist.setDelDesc(delDesc);// Set 删除说明
        // 调用旅游景点DAO接口
        return this.touristInfoMapper.selectList(tourist);
    }

}
